magiclanternfandomcom-20200223-history
IDAPython/Tracing calls tutorial
This page is obsolete, but might be useful as a tutorial for IDAPython. The new tracing method is IDAPython/Backtracing. Okay, so if you read the IDAPython page, you probably want to write a complete script. Let's give it a try. We'd like to trace the calls to some function, to see from where it's called and with which arguments. Let's try register_func. A call to it looks like this: ROM:FF0702EC ADR R2, taskshow_cmd ROM:FF0702F0 MOV R1, #0 ROM:FF0702F4 ADR R0, aTaskshow ; "taskShow" ROM:FF0702F8 BL register_func So we'll trace arguments in R0, R1 and R2. First, a few basic inits: from idautils import * from idc import * import re, string ea = ScreenEA() And some utility functions: # This returns the list of registers from R0...R3 referenced in an ASM string: # getRegs03("LDR R1, R3+R5") returns 1,3 def getRegs03(op): R = [] regs = re.split("(R0-3)^0-9", str(op) + " ") for r in regs: if len® 2 and r0 "R": R.append(int(r1)) return R # some older versions of IDAPython don't have this def FuncItems(start): func = idaapi.get_func(start) if not func: return fii = idaapi.func_item_iterator_t() ok = fii.set(func) while ok: yield fii.current() ok = fii.next_code() For each call, we'll store the 3 arguments in a dictionary, using the call address as key. Args = {} # Args0xFF0702F8 => ("taskShow", 0, "taskshow_cmd") Let's find the address of this function: for funcea in Functions(SegStart(ea), SegEnd(ea)): name = GetFunctionName(funcea) if name "register_func": tracedfunc = funcea print "Function found at %x" % tracedfunc Now, we'll go through each function which calls register_func: for ref in CodeRefsTo(tracedfunc, 1): print " called from %s(0x%x)" % (GetFunctionName(ref), ref) E = list(FuncItems(ref)) if len(E) 0: print "ORPHAN CALL (NOT IN A FUNCTION)!!!!" print " at %X " % ref continue If we are lucky, we can assume there'll be no disturbing jumps. We'll handle MOV, LDR and ADR instructions and assume the last such instruction before the call will set the value of the arg we are looking for. If, after the last call, there will be other instructions accessing the register, we'll declare the value as "unknown/None". So, continuing the previous loop: val = None,None,None,None for e in E: if GetMnem(e) "LDR" and GetOpnd(e,0) in "R0","R1","R2" and GetOpType(e,1) 2: op = GetOpnd(e,1) if op.startswith("=0x"): valGetOperandValue(e,0) = int(op3:, 16) elif op.startswith("=unk_"): valGetOperandValue(e,0) = int(op5:, 16) elif op.startswith("unk_"): valGetOperandValue(e,0) = int(op4:, 16) else: valGetOperandValue(e,0) = "'%s'<%s,0x%X>" % (GetString(GetOperandValue(e,1), -1, ASCSTR_C), GetOpnd(e,1), GetOperandValue(e,1)) elif GetMnem(e) "MOV" and GetOpnd(e,0) in "R0","R1","R2" and GetOpType(e,1) 5: valGetOperandValue(e,0) = GetOperandValue(e,1) elif GetMnem(e) "ADR" and GetOpnd(e,0) in "R0","R1","R2": valGetOperandValue(e,0) = "'%s'<%s,0x%X>" % (GetString(GetOperandValue(e,1), -1, ASCSTR_C), GetOpnd(e,1), GetOperandValue(e,1)) else: for r in getRegs03(GetDisasm(e)): valr = None if e ref: break #~ print val Argsref = val for addr,(r0,r1,r2,r3) in sorted(Args.iteritems(), key=lambda x: x10): print r0, r1, r2, "%X"%addr, GetFunctionName(addr) Good, so we've got a simple console output of the calls. Let's write them to a Wiki table. tab = open("table.txt", "w") tab.write(""" \n") tab.close() That's it! Just ignore the 'None's. For 550D: And for 5D: {| border="1" ! scope="col"|R0 ! scope="col"|R1 ! scope="col"|R2 ! scope="col"|Called from: func |- |'AdaptFGTest' |0 |'À' |AJ_register_func_rmtRelease_rmtSaveToPC_AdaptFGTest <0xFF827374> |- |'CheckSumOfProgramArea' |0 |'äÔ'<=AJ_FA_GetIcuCheckSum_also_called_CheckSumOfProgramArea,0xFF81DC64> |AJ_register_func_LoadsOfEm <0xFF81DB94> |- |'DisableBootDisk' |0 |'œ' |AJ_loads_of_calls2_to_register_func <0xFF86AC38> |- |'DisableCardNoiseChk' |0 |'`À‰'<=AJ_DisableCardNoiseChk,0xFF825520> |AJ_register_func_CardNoise_related <0xFF8253A4> |- |'DisableFirmware' |0 |'ˆ' |AJ_loads_of_calls2_to_register_func <0xFF86AC18> |- |'DisableMainFirm' |0 |'None' |AJ_loads_of_calls2_to_register_func <0xFF86AC5C> |- |'DpMR' |0 |'L/Œ'<=AJ_DpMR,0xFF8C3678> |AJ_register_func_VramToYuv422B_VramToBmp_DpSetDustReduction_etc <0xFF8C35B8> |- |'DpSetDebugMode' |0 |'None' |AJ_register_func_VramToYuv422B_VramToBmp_DpSetDustReduction_etc <0xFF8C3588> |- |'DpSetDetectFaceMode' |0 |'None' |AJ_register_func_VramToYuv422B_VramToBmp_DpSetDustReduction_etc <0xFF8C3598> |- |'DpSetDustReduction' |0 |'È' |AJ_register_func_VramToYuv422B_VramToBmp_DpSetDustReduction_etc <0xFF8C35A8> |- |'DumpAudioIcRegister' |0 |',•…'<=AJ_DumpAudioICRegister,0xFF859B40> |TH_audio_ic_initialize <0xFF859A2C> |- |'EP_Lvaf_DisableLog' |0 |'d½'<=AJ_EP_Lvaf_DisableLog,0xFFA0C450> |AJ_register_func_EP_Lvcaf_related <0xFFA0C390> |- |'EP_Lvaf_EnableLog' |0 |'T½'<=AJ_EP_Lvaf_EnableLog,0xFFA0C438> |AJ_register_func_EP_Lvcaf_related <0xFFA0C37C> |- |'EP_Lvcaf_PcfgBitSelect' |0 |'ÜÀ'<=AJ_EP_Lvcaf_PcfgBitSelect,0xFFA0C3FC> |AJ_register_func_EP_Lvcaf_related <0xFFA0C35C> |- |'EP_Lvcaf_PcfgEnable' |0 |'None'<=AJ_EP_Lvcaf_PcfgEnable,0xFFA0C3CC> |AJ_register_func_EP_Lvcaf_related <0xFFA0C33C> |- |'EP_Lvcaf_PcfgRotate' |0 |'0À'<=AJ_EP_Lvcaf_PcfgRotate,0xFFA0C3E4> |AJ_register_func_EP_Lvcaf_related <0xFFA0C34C> |- |'EP_Lvcaf_PcfgSelIntrMask' |0 |'¸Â'<=AJ_EP_Lvcaf_PcfgSelIntrMask,0xFFA0C418> |AJ_register_func_EP_Lvcaf_related <0xFFA0C36C> |- |'EnableBootDisk' |0 |'¨' |AJ_loads_of_calls2_to_register_func <0xFF86AC28> |- |'EnableCardNoiseChk' |0 |'PÀ‰'<=AJ_EnableCardNoiseChk,0xFF825508> |AJ_register_func_CardNoise_related <0xFF825390> |- |'EnableFirmware' |0 |'”' |AJ_loads_of_calls2_to_register_func <0xFF86AC08> |- |'EnableMainFirm' |0 |'None' |AJ_loads_of_calls2_to_register_func <0xFF86AC48> |- |'ExecuteDL' |0 |'œ'<=AJ_ExecuteDL,0xFF821E10> |AJ_loads_of_calls_to_register_func <0xFF821C3C> |- |'FA_GetAdapterFGInfo' |0 |'d'<=AJ_FA_GetAdapterFGInfo,0xFF840CB4> |AJ_RegisterFuncs_for_ceres_subs <0xFF840B80> |- |'FA_GetAdapterProperty' |0 |'À'<=AJ_FA_GetAdapterProperty,0xFF840C98> |AJ_RegisterFuncs_for_ceres_subs <0xFF840B70> |- |'FA_SetAdapterProperty' |0 |'None' |AJ_RegisterFuncs_for_ceres_subs <0xFF840B60> |- |'GetCamSetProp' |0 |'None' |AJ_register_func_LoadsOfEm <0xFF81DBA4> |- |'NotifyNoiseReduction' |0 |'TÄ…'<=AJ_NotifyNoiseReduction,0xFF85B59C> |AJ_InitializeSoundDevice <0xFF85B354> |- |'PrepareDL' |0 |','<=AJ_PrepareDL,0xFF821E00> |AJ_loads_of_calls_to_register_func <0xFF821C2C> |- |'ReceiveDataForAudioIC' |0 |'¼•…'<=AJ_ReceiveDataForAudioIC,0xFF859B24> |TH_audio_ic_initialize <0xFF859A18> |- |'SaveCamSetProp' |0 |'XÖ'<=AJ_SaveCamSetProp,0xFF81DCA4> |AJ_register_func_LoadsOfEm <0xFF81DBC4> |- |'SaveRasenToFile' |0 |'p@-é' |AJ_register_func_LoadsOfEm <0xFF81DC04> |- |'SaveRingToFile' |0 |'p@-é' |AJ_register_func_LoadsOfEm <0xFF81DC18> |- |'SendDataForAudioIC' |0 |'8@-é' |TH_audio_ic_initialize <0xFF859A08> |- |'SetCamSetProp' |0 |'¨Õ'<=AJ_SetCamSetProp,0xFF81DC90> |AJ_register_func_LoadsOfEm <0xFF81DBB4> |- |'SetTuningFlag' |0 |'œÔ'<=AJ_MiscSettuningflag,0xFF81DC44> |AJ_register_func_LoadsOfEm <0xFF81DB74> |- |'TftOff' |0 |'None' |AJ_register_func_LoadsOfEm <0xFF81DBE4> |- |'VramToBmp' |0 |'None' |AJ_register_func_VramToYuv422B_VramToBmp_DpSetDustReduction_etc <0xFF8C35C8> |- |'VramToYuv422' |0 |'None' |AJ_register_func_VramToYuv422B_VramToBmp_DpSetDustReduction_etc <0xFF8C35D8> |- |'VramToYuv422B' |0 |'None' |AJ_register_func_VramToYuv422B_VramToBmp_DpSetDustReduction_etc <0xFF8C35EC> |- |'alvGetPeak' |0 |'None' |TH_register_alv_functions <0xFFA6566C> |- |'alvSetALC' |0 |'None' |TH_register_alv_functions <0xFFA65638> |- |'alvSetVol' |0 |'None' |TH_register_alv_functions <0xFFA65648> |- |'alvSetWind' |0 |'None' |TH_register_alv_functions <0xFFA65658> |- |'alvStart' |0 |'\Q¦'<=TH_alvStart,0xFFA65728> |TH_register_alv_functions <0xFFA65618> |- |'alvStop' |0 |'×' |TH_register_alv_functions <0xFFA65628> |- |'ceresCatalog' |0 |'None' |AJ_RegisterFuncs_for_ceres_subs <0xFF840B10> |- |'ceresDump' |0 |'p@-é' |AJ_RegisterFuncs_for_ceres_subs <0xFF840AF0> |- |'ceresMount' |0 |'�@-é' |AJ_RegisterFuncs_for_ceres_subs <0xFF840B20> |- |'ceresTcpipTest' |0 |'�@-é' |AJ_RegisterFuncs_for_ceres_subs <0xFF840B90> |- |'ceresTest' |0 |'0@-é' |AJ_RegisterFuncs_for_ceres_subs <0xFF840B00> |- |'ceresUnmount' |0 |'h'<=AJ_ceresUnmount,0xFF840C4C> |AJ_RegisterFuncs_for_ceres_subs <0xFF840B30> |- |'ceresUpdate' |0 |'h'<=AJ_ceresUpdate,0xFF840C60> |AJ_RegisterFuncs_for_ceres_subs <0xFF840B40> |- |'ceresWizard' |0 |'4'<=AJ_ceresWizard,0xFF840C70> |AJ_RegisterFuncs_for_ceres_subs <0xFF840B50> |- |'ceresWpsCancel' |0 |'@'<=AJ_ceresWpsCancel,0xFF840D80> |AJ_RegisterFuncs_for_ceres_subs <0xFF840C14> |- |'ceresWpsPbcSelect' |0 |'�@-é' |AJ_RegisterFuncs_for_ceres_subs <0xFF840BA0> |- |'ceresWpsPbcStart' |0 |'D'<=AJ_ceresWpsPbcStart,0xFF840CF0> |AJ_RegisterFuncs_for_ceres_subs <0xFF840BB0> |- |'ceresWpsPinCodeAp' |0 |'´'<=AJ_ceresWpsPinCodeAp,0xFF840D38> |AJ_RegisterFuncs_for_ceres_subs <0xFF840BE0> |- |'ceresWpsPinCodeSet' |0 |'p'<=AJ_ceresWpsPinCodeSet,0xFF840D50> |AJ_RegisterFuncs_for_ceres_subs <0xFF840BF0> |- |'ceresWpsPinCodeWft' |0 |'ä'<=AJ_ceresWpsPinCodeWft,0xFF840D20> |AJ_RegisterFuncs_for_ceres_subs <0xFF840BD0> |- |'ceresWpsPinSelect' |0 |'None'<=AJ_ceresWpsPinSelect,0xFF840D08> |AJ_RegisterFuncs_for_ceres_subs <0xFF840BC0> |- |'ceresWpsPinStart' |0 |'X'<=AJ_ceresWpsPinStart,0xFF840D68> |AJ_RegisterFuncs_for_ceres_subs <0xFF840C00> |- |'checksum' |0 |'`<‡'<=AJ_checksum,0xFF87449C> |AJ_loads_of_calls3_to_register_func <0xFF874310> |- |'d' |0 |'None' |AJ_loads_of_calls3_to_register_func <0xFF8742C0> |- |'dl_C' |0 |'None' |AJ_loads_of_calls_to_register_func <0xFF821D0C> |- |'dl_K' |0 |'None' |AJ_loads_of_calls_to_register_func <0xFF821CFC> |- |'dl_fconv' |0 |'None' |AJ_loads_of_calls_to_register_func <0xFF821D20> |- |'dl_flong1' |0 |'°' |AJ_loads_of_calls_to_register_func <0xFF821C6C> |- |'dl_flong2' |0 |'°' |AJ_loads_of_calls_to_register_func <0xFF821CBC> |- |'dl_fstr1' |0 |'°' |AJ_loads_of_calls_to_register_func <0xFF821C5C> |- |'dl_fstr2' |0 |'°' |AJ_loads_of_calls_to_register_func <0xFF821CAC> |- |'dl_print' |0 |'None' |AJ_loads_of_calls_to_register_func <0xFF821C4C> |- |'dl_swe_count1' |0 |'°' |AJ_loads_of_calls_to_register_func <0xFF821C7C> |- |'dl_swe_count2' |0 |'°' |AJ_loads_of_calls_to_register_func <0xFF821CCC> |- |'dl_swe_int1' |0 |'°' |AJ_loads_of_calls_to_register_func <0xFF821C9C> |- |'dl_swe_stp1' |0 |'°' |AJ_loads_of_calls_to_register_func <0xFF821C8C> |- |'dl_swe_stp2' |0 |'°' |AJ_loads_of_calls_to_register_func <0xFF821CDC> |- |'dl_temp' |0 |'°' |AJ_loads_of_calls_to_register_func <0xFF821CEC> |- |'dmhistory' |0 |'|@-é' |AJ_loads_of_RegisterFunc_calls <0xFF86B9C4> |- |'dmprint' |0 |'p@-é' |AJ_loads_of_RegisterFunc_calls <0xFF86B994> |- |'dmstart' |0 |'È®†'<=TH_dmstart,0xFF86BA54> |AJ_loads_of_RegisterFunc_calls <0xFF86B914> |- |'dmstop' |0 |'�¯†'<=TH_dmstop,0xFF86BA60> |AJ_loads_of_RegisterFunc_calls <0xFF86B924> |- |'dmstore' |0 |'p@-é' |AJ_loads_of_RegisterFunc_calls <0xFF86B9A4> |- |'dump' |0 |'˜�' |AJ_loads_of_RegisterFunc_calls <0xFF86B934> |- |'dumpentire' |0 |'˜µ†'<=AJ_dumpentire,0xFF86BAC4> |AJ_loads_of_RegisterFunc_calls <0xFF86B9D4> |- |'dumpentiresep' |0 |'¬³†'<=AJ_dumpentiresep,0xFF86BB20> |AJ_loads_of_RegisterFunc_calls <0xFF86BA48> |- |'dumpf' |0 |'h�' |AJ_loads_of_RegisterFunc_calls <0xFF86B944> |- |'dumpfsep' |0 |'8µ†'<=AJ_dumpfsep,0xFF86BAE0> |AJ_loads_of_RegisterFunc_calls <0xFF86B9F4> |- |'dumpsep' |0 |'hµ†'<=AJ_dumpsep,0xFF86BAD4> |AJ_loads_of_RegisterFunc_calls <0xFF86B9E4> |- |'fcDump' |0 |'”Ÿ—'<=AJ_fcDump,0xFF857BB4> |AJ_register_fcDump <0xFF857BB0> |- |'fcacheClear' |0 |'None' |AJ_register_FileCache_Dump_n_Clear <0xFF829A34> |- |'fcacheDump' |0 |'8@-é' |AJ_register_FileCache_Dump_n_Clear <0xFF829A20> |- |'filewrite' |0 |'None' |AJ_loads_of_calls3_to_register_func <0xFF874340> |- |'flasherase' |0 |'„<‡'<=AJ_flasherase,0xFF8744AC> |AJ_loads_of_calls3_to_register_func <0xFF874320> |- |'flashwrite' |0 |'„=‡'<=AJ_flashwrite,0xFF8744BC> |AJ_loads_of_calls3_to_register_func <0xFF874330> |- |'fmDump' |0 |'p@-é' |AJ_register_fmDump <0xFF84939C> |- |'gang' |0 |'€:‡'<=AJ_gang,0xFF874490> |AJ_loads_of_calls3_to_register_func <0xFF874300> |- |'gpioread' |0 |'None' |AJ_loads_of_calls3_to_register_func <0xFF874360> |- |'gpiowrite' |0 |'None' |AJ_loads_of_calls3_to_register_func <0xFF874350> |- |'grep' |0 |'None' |AJ_loads_of_RegisterFunc_calls <0xFF86B954> |- |'grepsep' |0 |'None' |AJ_loads_of_RegisterFunc_calls <0xFF86BA04> |- |'harbint' |0 |'None' |AJ_loads_of_calls3_to_register_func <0xFF874370> |- |'i' |0 |'x<‡'<=sub_FF873C78,0xFF87447C> |AJ_loads_of_calls3_to_register_func <0xFF8742E0> |- |'ipcBulkIn' |0 |'None' |AJ_register_func_ipc_related <0xFFB3C368> |- |'ipcBulkOut' |0 |'None' |AJ_register_func_ipc_related <0xFFB3C358> |- |'ipcControl' |0 |'None' |AJ_register_func_ipc_related <0xFFB3C348> |- |'ipcDirect' |0 |'None' |AJ_register_func_ipc_related <0xFFB3C338> |- |'ipcTest' |0 |'g' |AJ_register_func_ipc_related <0xFFB3C37C> |- |'ipcmBase' |0 |'p¹³'<=AJ_ipcmBase,0xFFB3C3D8> |AJ_register_func_ipc_related <0xFFB3C2F8> |- |'ipcmDump' |0 |'`¡¹'<=AJ_ipcmDump,0xFFB3C3E8> |AJ_register_func_ipc_related <0xFFB3C308> |- |'ipcsBase' |0 |'¸»³'<=AJ_ipcsBase,0xFFB3C3F8> |AJ_register_func_ipc_related <0xFFB3C318> |- |'ipcsDump' |0 |'Ì¦¹'<=AJ_ipcsDump,0xFFB3C408> |AJ_register_func_ipc_related <0xFFB3C328> |- |'k241printdongle' |0 |'8@-é' |AJ_register_funcs_for_k241_printsystem <0xFF93D9A4> |- |'k241printftp' |0 |'œ¿“'<=AJ_k241printftp,0xFF93DA58> |AJ_register_funcs_for_k241_printsystem <0xFF93D924> |- |'k241printimagetrans' |0 |'TÓ“'<=AJ_k241printimagetrans,0xFF93DB28> |AJ_register_funcs_for_k241_printsystem <0xFF93D9C4> |- |'k241printlock' |0 |'�@-é' |AJ_register_funcs_for_k241_printsystem <0xFF93D9E4> |- |'k241printsystem' |0 |'°¹“'<=AJ_k241printsystem,0xFF93DA08> |AJ_register_funcs_for_k241_printsystem <0xFF93D8E4> |- |'k241printtcpip' |0 |'œ»“'<=AJ_k241printtcpip,0xFF93DA30> |AJ_register_funcs_for_k241_printsystem <0xFF93D904> |- |'k241printtransmission' |0 |'ìÍ“'<=AJ_k241printtransmission,0xFF93DAD0> |AJ_register_funcs_for_k241_printsystem <0xFF93D984> |- |'k241printwired' |0 |'None'<=AJ_k241printwired,0xFF93DAA8> |AJ_register_funcs_for_k241_printsystem <0xFF93D964> |- |'k241printwireless' |0 |'\Æ“'<=AJ_k241printwireless,0xFF93DA7C> |AJ_register_funcs_for_k241_printsystem <0xFF93D944> |- |'k241setdongle' |0 |'¤Ñ“'<=AJ_k241setdongle,0xFF93DB14> |AJ_register_funcs_for_k241_printsystem <0xFF93D9B4> |- |'k241setftp' |0 |'DÃ“'<=AJ_k241setftp,0xFF93DA6C> |AJ_register_funcs_for_k241_printsystem <0xFF93D934> |- |'k241setimagetrans' |0 |'8@-é' |AJ_register_funcs_for_k241_printsystem <0xFF93D9D4> |- |'k241setlock' |0 |'None' |AJ_register_funcs_for_k241_printsystem <0xFF93D9F4> |- |'k241setsystem' |0 |'None'<=AJ_k241setsystem,0xFF93DA1C> |AJ_register_funcs_for_k241_printsystem <0xFF93D8F4> |- |'k241settcpip' |0 |'None'<=AJ_k241settcpip,0xFF93DA44> |AJ_register_funcs_for_k241_printsystem <0xFF93D914> |- |'k241settransmission' |0 |'4Î“'<=AJ_k241settransmission,0xFF93DAEC> |AJ_register_funcs_for_k241_printsystem <0xFF93D994> |- |'k241setwired' |0 |'XÍ“'<=AJ_k241setwired,0xFF93DABC> |AJ_register_funcs_for_k241_printsystem <0xFF93D974> |- |'k241setwireless' |0 |'œÉ“'<=AJ_k241setwireless,0xFF93DA94> |AJ_register_funcs_for_k241_printsystem <0xFF93D954> |- |'logstat' |0 |'None' |AJ_loads_of_RegisterFunc_calls <0xFF86B9B4> |- |'macdispinf' |0 |'0@-é' |AJ_MAC_Initialize_n_KeyBoardBody <0xFF983D20> |- |'macsetkeyid' |0 |'�@-é' |AJ_MAC_Initialize_n_KeyBoardBody <0xFF983D30> |- |'mdset' |0 |'None' |AJ_LVC_MD_task_setup <0xFF838900> |- |'mdtf' |0 |'None' |AJ_LVC_MD_task_setup <0xFF838910> |- |'memMap' |0 |'€'<=AJ_memMap,0xFF8744F8> |AJ_loads_of_calls3_to_register_func <0xFF874380> |- |'memShow' |0 |'None' |AJ_loads_of_calls3_to_register_func <0xFF8742D0> |- |'movieCancel' |0 |'None' |AJ_register_func_movieCancel_movieVolSet_movieSpeedSet_moviePlaySet <0xFF849F94> |- |'moviePlaySet' |0 |'None' |AJ_register_func_movieCancel_movieVolSet_movieSpeedSet_moviePlaySet <0xFF849FC8> |- |'movieSpeedSet' |0 |'None' |AJ_register_func_movieCancel_movieVolSet_movieSpeedSet_moviePlaySet <0xFF849FB4> |- |'movieVolSet' |0 |'None' |AJ_register_func_movieCancel_movieVolSet_movieSpeedSet_moviePlaySet <0xFF849FA4> |- |'objInfo' |0 |'À'<=AJ_objInfo,0xFF874504> |AJ_loads_of_calls3_to_register_func <0xFF874390> |- |'olddump' |0 |'None' |AJ_loads_of_RegisterFunc_calls <0xFF86B964> |- |'olddumpf' |0 |'À' |AJ_loads_of_RegisterFunc_calls <0xFF86B974> |- |'olddumpfsep' |0 |'None' |AJ_loads_of_RegisterFunc_calls <0xFF86BA24> |- |'olddumpsep' |0 |'L' |AJ_loads_of_RegisterFunc_calls <0xFF86BA14> |- |'oldgrep' |0 |'None' |AJ_loads_of_RegisterFunc_calls <0xFF86B984> |- |'oldgrepsep' |0 |'H´†'<=AJ_oldgrepsep,0xFF86BB10> |AJ_loads_of_RegisterFunc_calls <0xFF86BA34> |- |'rmtRelease' |0 |'�@-é' |AJ_register_func_rmtRelease_rmtSaveToPC_AdaptFGTest <0xFF827350> |- |'rmtSaveToPC' |0 |'�@-é' |AJ_register_func_rmtRelease_rmtSaveToPC_AdaptFGTest <0xFF827360> |- |'selfRefresh' |0 |None |AJ_RegisterFuncs_waitForInt_n_selfRefresh <0xFF9B5A64> |- |'send_mpu' |0 |'0@-é' |AJ_register_func_LoadsOfEm <0xFF81DBD4> |- |'sht_fc' |0 |'`¼›'<=AJ_sht_fc,0xFF9BDB2C> |AJ_register_func_sht_related <0xFF9BD9C4> |- |'sht_fixflag' |0 |'None'<=AJ_sht_fixflag,0xFF9BDA58> |AJ_register_func_sht_related <0xFF9BD904> |- |'sht_fixregsave' |0 |'None' |AJ_register_func_sht_related <0xFF9BD8C4> |- |'sht_fo' |0 |'�¼›'<=AJ_sht_fo,0xFF9BDB38> |AJ_register_func_sht_related <0xFF9BD9D8> |- |'sht_mem1develop' |0 |'Ô¼›'<=AJ_sht_mem1develop,0xFF9BDAF0> |AJ_register_func_sht_related <0xFF9BD994> |- |'sht_mem1read' |0 |'ÈÈ›'<=AJ_sht_mem1read,0xFF9BDA68> |AJ_register_func_sht_related <0xFF9BD914> |- |'sht_memoryread' |0 |'È›'<=AJ_sht_memoryread,0xFF9BDA7C> |AJ_register_func_sht_related <0xFF9BD924> |- |'sht_memorywrite' |0 |'¬Ç›'<=AJ_sht_memorywrite,0xFF9BDA90> |AJ_register_func_sht_related <0xFF9BD934> |- |'sht_mirror' |0 |'None'<=AJ_sht_mirror_or.maybe_FIO_power_control,0xFF9BDAD0> |AJ_register_func_sht_related <0xFF9BD974> |- |'sht_mon' |0 |'|Ç›'<=AJ_sht_mon,0xFF9BDAA4> |AJ_register_func_sht_related <0xFF9BD944> |- |'sht_mon2' |0 |'€Æ›'<=AJ_sht_mon2,0xFF9BDAB0> |AJ_register_func_sht_related <0xFF9BD954> |- |'sht_mon3' |0 |'pÆ›'<=AJ_sht_mon3,0xFF9BDAC0> |AJ_register_func_sht_related <0xFF9BD964> |- |'sht_propread' |0 |'None' |AJ_register_func_sht_related <0xFF9BD894> |- |'sht_propshow' |0 |'None' |AJ_register_func_sht_related <0xFF9BD8B4> |- |'sht_propwrite' |0 |'t' |AJ_register_func_sht_related <0xFF9BD8A4> |- |'sht_regread' |0 |'„Ò›'<=AJ_sht_regread,0xFF9BDA34> |AJ_register_func_sht_related <0xFF9BD8E4> |- |'sht_regwrite' |0 |'HÎ›'<=AJ_sht_regwrite,0xFF9BDA44> |AJ_register_func_sht_related <0xFF9BD8F4> |- |'sht_spsresume' |0 |'83‚'<=AJ_sht_spsresume,0xFF9BDB18> |AJ_register_func_sht_related <0xFF9BD9B4> |- |'sht_spssuspend' |0 |'None'<=AJ_sht_spssuspend,0xFF9BDB04> |AJ_register_func_sht_related <0xFF9BD9A4> |- |'sht_tuneregsave' |0 |'None' |AJ_register_func_sht_related <0xFF9BD8D4> |- |'sht_write' |0 |'ÐÄ›'<=AJ_sht_write,0xFF9BDAE0> |AJ_register_func_sht_related <0xFF9BD984> |- |'sio_logon' |0 |'È' |AJ_register_func_sio_logon <0xFFA35954> |- |'sysConfig' |0 |'à'<=AJ_sysConfig,0xFF874510> |AJ_loads_of_calls3_to_register_func <0xFF8743A4> |- |'taskShow' |0 |'None' |AJ_loads_of_calls3_to_register_func <0xFF8742F0> |- |'tg_apoweron' |0 |'¨ ' |AJ_loads.of_AJ_SearchFromProperty_DataType_n_couple.of_register_func_tg_related <0xFFA363F8> |- |'tg_tgstart' |0 |'€^£'<=AJ_setup_IMGPOWDET_ISR,0xFFA3679C> |AJ_loads.of_AJ_SearchFromProperty_DataType_n_couple.of_register_func_tg_related <0xFFA36408> |- |'tomCancel' |0 |'>@-é' |AJ_register_Tom_functions <0xFF8444F8> |- |'tomChange' |0 |'à@„'<=AJ_tomChange,0xFF8445FC> |AJ_register_Tom_functions <0xFF844508> |- |'tomDump' |0 |'À�' |AJ_register_Tom_functions <0xFF84453C> |- |'tomGet' |0 |'None' |AJ_register_Tom_functions <0xFF8444C8> |- |'tomGetNum' |0 |' @„'<=AJ_tomGetNum,0xFF84460C> |AJ_register_Tom_functions <0xFF844518> |- |'tomSelect' |0 |'None' |AJ_register_Tom_functions <0xFF8444E8> |- |'tomSet' |0 |'None' |AJ_register_Tom_functions <0xFF8444B8> |- |'tomStart' |0 |'>@-é' |AJ_register_Tom_functions <0xFF8444D8> |- |'update' |0 |'Ô«†'<=AJ_update_aka_DisableFirmware,0xFF81DC58> |AJ_register_func_LoadsOfEm <0xFF81DB84> |- |'usvMaker' |0 |'0@-é' |AJ_register_func_LoadsOfEm <0xFF81DBF4> |- |'waitForInt' |0 |'hZ›'<=AJ_waitForInt,0xFF9B5B08> |AJ_RegisterFuncs_waitForInt_n_selfRefresh <0xFF9B5A4C> |- |'”@„'<=aTomclear,0xFF844620> |0 |'¨?„'<=AJ_tomClear,0xFF84461C> |AJ_register_Tom_functions <0xFF844528> |}